delete 和 free 有什么区别?

5 分钟阅读 348 字 + 674 词
参考答案
delete free 都是用来释放动态分配的内存,但它们有不同的使用方式:
  1. 语法
    • delete 是C++中的关键字,用于释放由 new 分配的对象。
    • free 是C语言中的函数,通常包含在 头文件中,用于释放由 malloc 分配的内存。
  2. 对象销毁
    • 当使用 delete 释放对象内存时, C++ 编译器会自动调用对象的析构函数,释放与对象相关的资源,并执行对象的清理工作。
    • free 仅释放内存,不调用析构函数。因此,如果使用 malloc 分配了 C++ 对象的内存,需要手动调用析构函数后再调用 free
  3. 数组处理
    • 如果是数组,C++提供了 delete[] 来释放整个数组的内存,而C语言中仍然使用 free ,没有区分单个对象和数组。
  4. 返回值:
    • free 没有返回值,即使内存释放失败,也不会反馈任何信息。
    • delete 之后,指针会自动置为 nullptr
  5. 类型检查:
    • delete 进行类型检查,确保删除的对象类型与 new 分配时的类型一致。
    • free 不进行类型检查,因为它只处理 void* 类型的指针。
总结来说, delete free 都是用来释放动态内存的,但它们分别用于C++和C语言中的内存管理。 delete 适用于C++对象,会自动调用析构函数;而 free 适用于C语言分配的内存,不涉及对象的析构。